﻿
namespace CSharpLibs.Annotations
{
	/// <summary>
	/// Is the class/interface a builtin type
	/// </summary>
	[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface | System.AttributeTargets.Struct | System.AttributeTargets.Delegate | System.AttributeTargets.Enum)]
	public class BuiltinAttribute : System.Attribute
	{ }

	/// <summary>
	/// Does the class contain some form of internal representation magic that needs to be handled via a special constructor.
	/// </summary>
	[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Interface | System.AttributeTargets.Struct)]
	public class BuiltinImplementationAttribute : System.Attribute
	{ }

	/// <summary>
	/// Does the class represent a container
	/// </summary>
	[System.AttributeUsage(System.AttributeTargets.Class)]
	public class ContainerAttribute : System.Attribute
	{ }

	/// <summary>
	/// Does the class represent a list
	/// </summary>
	[System.AttributeUsage(System.AttributeTargets.Class)]
	public class ListAttribute : System.Attribute
	{ }

	/// <summary>
	/// Does the class represent a set data structure
	/// </summary>
	[System.AttributeUsage(System.AttributeTargets.Class)]
	public class SetAttribute : System.Attribute
	{ }

	/// <summary>
	/// Does the class represent a dictionary data structure
	/// </summary>
	[System.AttributeUsage(System.AttributeTargets.Class)]
	public class DictionaryAttribute : System.Attribute
	{ }

	/// <summary>
	/// Does the class represent a key value pair object
	/// </summary>
	[System.AttributeUsage(System.AttributeTargets.Struct)]
	public class KeyValPairAttribute : System.Attribute
	{ }

	/// <summary>
	/// Does the class represent an enumerator
	/// </summary>
	[System.AttributeUsage(System.AttributeTargets.Struct)]
	public class EnumeratorAttribute : System.Attribute
	{ }
}
